package com.demo2;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 中介者模式
 * @author zhoujun
 * @date 2025/3/26 23:39
 */
public class ConcreteMediator implements Mediator {

    //使用一个map来存储同事对象和它目标对象的映射关系,实现1对1,1对多
    private Map<Colleague,List<Colleague>> map = new HashMap<>();


    /**
     *
     * @param colleague  发送主体
     * @param targets   目标
     */
    @Override
    public void register(Colleague colleague,Colleague... targets) {
       if (!map.containsKey(colleague)){
           map.put(colleague,new ArrayList<>());
       }

        for (Colleague target : targets) {
            if (!map.get(colleague).contains(target)){
                map.get(colleague).add(target);
            }
        }
    }

    /**
     * 转发消息给目标同事对象
     * @param colleague  发送者
     * @param message    消息
     */
    @Override
    public void relay(Colleague colleague, String message) {
        if (map.containsKey(colleague)){
            for (Colleague target : map.get(colleague)) {
                target.receive(message);
            }
        }
    }

}
